home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 16 / CU Amiga Magazine's Super CD-ROM 16 (1997-10-16)(EMAP Images)(GB)[!][issue 1997-11].iso / CUCD / Utilities / moreHTML / Source / mylist.c < prev    next >
C/C++ Source or Header  |  1997-09-11  |  2KB  |  130 lines

  1. // MyList
  2. // © Dirk Holtwick, 1997
  3.  
  4. /// Includes
  5. #include <clib/alib_protos.h>
  6. #include <proto/exec.h>
  7. #include <exec/memory.h>
  8. #include "mylist.h"
  9. ///
  10.  
  11. /// Example
  12. /*
  13.  
  14.    Simple list routines do works like this:
  15.  
  16.       struct Data {APTR succ; ... };
  17.       struct MyList *mylist;
  18.  
  19.       if(mylist = MyCreateList(sizeof(struct Data),100))
  20.       {
  21.          item = MyAddItem(mylist);
  22.          MyDisposeList(mylist);
  23.       }
  24.  
  25. */
  26. ///
  27. /// MyCreateList
  28. struct MyList *MyCreateList(register ULONG size, register ULONG pudsize)
  29. {
  30.    register struct MyList *mylist;
  31.  
  32.    if(mylist = AllocVec(sizeof(struct MyList), MEMF_CLEAR))
  33.    {
  34.       mylist->size    = size;
  35.       mylist->pudsize = pudsize;
  36.  
  37.       if(mylist->pool    = LibCreatePool(MEMF_CLEAR, (size * pudsize), size))
  38.       {
  39.          return(mylist);
  40.       }
  41.       FreeVec(mylist);
  42.    }
  43.    return(0);
  44. }
  45. ///
  46. /// MyDisposeList
  47. void MyDisposeList(register struct MyList *mylist)
  48. {
  49.    if(mylist)
  50.    {
  51.       if(mylist->pool) LibDeletePool(mylist->pool);
  52.       FreeVec(mylist);
  53.    }
  54. }
  55. ///
  56. /// MyAddItem
  57. APTR MyAddItem(register struct MyList *mylist)
  58. {
  59.    register struct MyItem *item;
  60.  
  61.    if(mylist)
  62.    {
  63.       if(item = LibAllocPooled(mylist->pool, mylist->size))
  64.       {
  65.          if(mylist->first)
  66.             mylist->last->next = item;
  67.          else
  68.             mylist->first = item;
  69.  
  70.          mylist->last = item;
  71.          item->next = 0;
  72.  
  73.          return(item);
  74.       }
  75.    }
  76.    return(0);
  77. }
  78. ///
  79. /// MyPushItem
  80. APTR MyPushItem(register struct MyList *mylist)
  81. {
  82.    register struct MyItem *item;
  83.  
  84.    // Insert an item at the beginning of the list
  85.  
  86.    if(mylist)
  87.    {
  88.       if(item = LibAllocPooled(mylist->pool, mylist->size))
  89.       {
  90.          if(mylist->last)
  91.             mylist->last = item;
  92.  
  93.          item->next = mylist->first;
  94.  
  95.          mylist->first = item;
  96.          mylist->last->next = 0;
  97.  
  98.          return(item);
  99.       }
  100.    }
  101.    return(0);
  102. }
  103. ///
  104. /// MyPullItem
  105. APTR MyPullItem(register struct MyList *mylist)
  106. {
  107.    register struct MyItem *item;
  108.  
  109.    // Insert an item at the beginning of the list
  110.  
  111.    if(mylist)
  112.    {
  113.       if(item = LibAllocPooled(mylist->pool, mylist->size))
  114.       {
  115.          if(mylist->last)
  116.             mylist->last = item;
  117.  
  118.          item->next = mylist->first;
  119.  
  120.          mylist->first = item;
  121.          mylist->last->next = 0;
  122.  
  123.          return(item);
  124.       }
  125.    }
  126.    return(0);
  127. }
  128. ///
  129.  
  130.